home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / pctchnqs / 1991 / number3 / strtest.pas < prev    next >
Pascal/Delphi Source File  |  1990-11-18  |  1KB  |  58 lines

  1. (* STRTEST.PAS -- efficient string allocation in Turbo Pascal *)
  2. Program StringTest;
  3. Type
  4.     NameString    = String[80];
  5.     StringPtr     = ^String;
  6.  
  7. (* FreeString -- Free the memory allocated to a dynamic string *)
  8. Procedure FreeString (Var s : StringPtr);
  9. Begin
  10.     If s <> Nil Then Begin
  11.     FreeMem (s, Length (s^) + 1);
  12.     s := Nil;
  13.     End;
  14. End;
  15.  
  16. (* AssignString -- Dynamically allocate string space *)
  17. Procedure AssignString (Var s : StringPtr; t : String);
  18. Begin
  19.     FreeString (s);
  20.     GetMem (s, Length (t) + 1);
  21.     s^ := t;
  22. End;
  23.  
  24. (* Global variables for main program *)
  25. Type
  26.     NameArray    = Array [1..10] of StringPtr;
  27. Var
  28.     Names    : NameArray;
  29.     x        : integer;
  30.     TempName    : NameString;
  31.  
  32. Begin (* Main program *)
  33.     (* Initialize the string pointers to Nil *)
  34.     For x := 1 to 10 do
  35.     Names[x] := Nil;
  36.  
  37.     WriteLn ('Available memory = ', MemAvail);
  38.  
  39.     (* Read the strings and store them in a buffer *)
  40.     For x := 1 to 10 do Begin
  41.     Write ('Enter Name: ');
  42.     ReadLn (TempName);
  43.     AssignString (Names[x], TempName);
  44.     End;
  45.  
  46.     (* Test assignment to existing string *)
  47.     AssignString (Names[5], 'This is a test');
  48.  
  49.     (* Display the strings from the buffer and *)
  50.     (* free each string after it's displayed *)
  51.     For x := 1 to 10 Do Begin
  52.     WriteLn (Names[x]^);
  53.     FreeString (Names[x]);
  54.     End;
  55.  
  56.     WriteLn ('Available memory = ', MemAvail);
  57. End.
  58.